package data_source

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
	"time"
)

var Db, OtherDb *gorm.DB
var err error

func init() {

	mysql_conf := LoadMysqlConf("conf/mysql_conf.json")
	other_mysql_conf := LoadMysqlConf("conf/other_mysql_conf.json")

	Db = initDatasource(mysql_conf)
	OtherDb = initDatasource(other_mysql_conf)
}

func initDatasource(mysql_conf *MysqlConf) *gorm.DB {
	data_source := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
		mysql_conf.UserName,
		mysql_conf.Password,
		mysql_conf.Host,
		mysql_conf.Port,
		mysql_conf.DataBase,
	)
	//fmt.Println(data_source)
	db, err := gorm.Open(mysql.New(mysql.Config{
		DSN:                       data_source, // DSN data source name
		DefaultStringSize:         256,         // string 类型字段的默认长度
		DisableDatetimePrecision:  true,        // 禁用 datetime 精度，MySQL 5.6 之前的数据库不支持
		SkipInitializeWithVersion: false,       // 根据当前 MySQL 版本自动配置
	}), &gorm.Config{
		SkipDefaultTransaction:                   true, //跳过事务
		DisableForeignKeyConstraintWhenMigrating: true, //使用代码建立表管理关系 跳过gorm建立
		//Logger:logger.Default.LogMode(logger.Info), //开启打印sql语句 也可以再查询的时候DB.Debug().Where("ID = ?", 52).First(&newData) 打印
		NamingStrategy: schema.NamingStrategy{
			SingularTable: true, // 使用单数表名
		},
	})
	if err != nil {
		fmt.Println(err)
	}

	// todo 下面代码无效
	sqlDb, err := db.DB()
	sqlDb.SetMaxIdleConns(10)           //最大空闲
	sqlDb.SetMaxOpenConns(100)          // 最大连接数
	sqlDb.SetConnMaxLifetime(time.Hour) //设置了连接可复用的最大时间。 1小时

	return db
}
